home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / docs / asm_guide / assembler course / 1.s next >
Text File  |  1992-04-27  |  2KB  |  68 lines

  1.  
  2.     ; this is the first source on the disk...
  3.     ; (exciting isn't it?)
  4.     ; (as you see, the lines with ; or * are not assembled)
  5.     ; this source contains 74 lines, of which only 6 lines are
  6.     ; code. That's super documentation or what ?!!??!!
  7.  
  8.  
  9.     ; when you run this source (j), Amiga will wait for you to
  10.     ; press the left mousebutton. If you do, the program ends
  11.     ; (rts) and seka will tell you the contents of the various
  12.     ; dataregisters. Something like this:
  13.  
  14. ; D0=00000000 00000000 00000000 00000000  .... 00000000
  15. ; A0=00000000 00000000    ....        ....   00c1c2bc
  16. ;SSP=00c1d24a ...    ....
  17.  
  18. ; the first row represents the different dataregisters (D0... D7)
  19. ; the second row the addresregs, A0-A7. See the last one in line 2 ?
  20. ; this is the stackpointer (a7) (=USP, user stack pointer)
  21. ; the last line are some more special pointers, like the supervisor-
  22. ; stack pointer, program counter,...
  23.  
  24. *************************
  25.  
  26. top:            ; this is a label
  27.             ; after assembling, it is replaced by a number,
  28.             ; an address in memory. All other references in 
  29.             ; this source to 'top' are replaced by this number
  30.             ; as well. try '@dtop' which means 'disassemble
  31.             ; from label top'
  32.             ; After assembling, type  '?top'  (=print the value
  33.             ; which corresponds with our label top) and you
  34.             ; will see what address TOP stands for.
  35.  
  36.     movem.l    d0-d7/a0-a6,-(a7)    ; save the registers !!!
  37.                     ; see letter
  38.  
  39. loop:    btst    #6,$bfe001    ; this instruction checks the
  40.                 ; 6th bit in addres $bfe001.
  41.                 ; this is the left mousebutton.
  42.  
  43.     bne.s    loop        ; if the 6th bit in $bfe001 is set,
  44.                 ; (not equal to zero), then go to
  45.                 ; label 'loop' (else: just go on)
  46.  
  47.     movem.l    (a7)+,d0-d7/a0-a6    ; reload the saved registers
  48.  
  49.     rts                ; and go back to the routine
  50.                     ; who called this subroutine
  51. *************************        ; (the 'higher level')
  52.                     ; since there is no higher
  53.                     ; level in this case, the 
  54.                     ; program is finished, and 
  55.                     ; returns back to Seka or
  56.                     ; to CLI
  57.  
  58.     ; please have a try and type 'dtop' after you assembled the
  59.     ; program. You'll see that each instruction is put on a 
  60.     ; certain address, and instead of 'bne.s label', there will
  61.     ; be an address, something like 'bne.s $2c043'
  62.     ; also note that each command starts at an EVEN address.
  63.  
  64.     ; note: the '.s' after the BNE means that it is a very small
  65.     ;    branch. This will result in a slightly shorter and
  66.     ;    faster code. (just for fun)
  67.  
  68.